package com.adk.backend.mapper;

import com.adk.backend.entity.LxInventoryList;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * 库存列表Mapper接口
 */
@Mapper
public interface InventoryListMapper extends BaseMapper<LxInventoryList> {
    
    /**
     * 根据条件查询库存列表
     */
    List<Map<String, Object>> selectInventoryListByCondition(@Param("params") Map<String, Object> params);
    
    /**
     * 统计库存数量
     */
    Long countInventoryListByCondition(@Param("params") Map<String, Object> params);
    
    /**
     * 根据仓库ID查询库存
     */
    List<LxInventoryList> selectByWhId(@Param("whId") Long whId);
    
    /**
     * 根据ID查询库存详情（带关联信息）
     */
    Map<String, Object> selectInventoryDetailById(@Param("id") Long id);
    
    /**
     * 检查库存是否存在（用于Excel导入时的重复检查）
     */
    Map<String, Object> selectInventoryExists(
        @Param("proId") Long proId,
        @Param("ibNo") String ibNo,
        @Param("batchCode") String batchCode,
        @Param("palletNo") String palletNo,
        @Param("vndId") Long vndId,
        @Param("whId") Long whId
    );
    
    /**
     * 根据EAN代码查找产品ID
     */
    Map<String, Object> selectProductIdByEanCode(@Param("eanCode") String eanCode);
    
    /**
     * 根据仓库引用代码查找仓库ID
     */
    Map<String, Object> selectWarehouseIdByWhRef(@Param("whRef") String whRef);
    
    /**
     * 根据供应商引用代码查找供应商ID
     */
    Map<String, Object> selectVendorIdByVndRef(@Param("vndRef") String vndRef);
    
    /**
     * 根据源仓库ID查询可调拨的库存列表
     */
    List<Map<String, Object>> selectTransferInventoryList(@Param("fromWhId") Long fromWhId);
    
    /**
     * 根据调拨单ID查询调拨明细
     */
    List<Map<String, Object>> selectTransferDetailsByTsfId(@Param("tsfId") Long tsfId);
    
    /**
     * 查询调拨单列表
     */
    List<Map<String, Object>> selectTransferList(@Param("params") Map<String, Object> params);
    
    /**
     * 查询库存汇总（按装车单）
     */
    List<Map<String, Object>> selectInventorySummaryByLdId(@Param("whId") Long whId);
    
    /**
     * 查询库存汇总（按订单）
     */
    List<Map<String, Object>> selectInventorySummaryByOrderId(@Param("whId") Long whId);
    
    /**
     * 查询过期库存（超过15天未完全发货）
     */
    List<Map<String, Object>> selectOverdueInventory(@Param("params") Map<String, Object> params);
}

